using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ConversionTools._ToRaster
{
    /// <summary>
    /// <para>Raster To Other Format</para>
    /// <para>Converts one or more raster datasets to a different format.</para>
    /// <para>将一个或多个栅格数据集转换为其他格式。</para>
    /// </summary>    
    [DisplayName("Raster To Other Format")]
    public class RasterToOtherFormat : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public RasterToOtherFormat()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_Input_Rasters">
        /// <para>Input Rasters</para>
        /// <para>The raster datasets to convert.</para>
        /// <para>要转换的栅格数据集。</para>
        /// </param>
        /// <param name="_Output_Workspace">
        /// <para>Output Workspace</para>
        /// <para>The folder where the raster dataset will be written.</para>
        /// <para>将写入栅格数据集的文件夹。</para>
        /// </param>
        public RasterToOtherFormat(List<object> _Input_Rasters, object _Output_Workspace)
        {
            this._Input_Rasters = _Input_Rasters;
            this._Output_Workspace = _Output_Workspace;
        }
        public override string ToolboxName => "Conversion Tools";

        public override string ToolName => "Raster To Other Format";

        public override string CallName => "conversion.RasterToOtherFormat";

        public override List<string> AcceptEnvironments => ["XYDomain", "ZDomain", "ZResolution", "compression", "configKeyword", "extent", "nodata", "outputCoordinateSystem", "outputZFlag", "pyramid", "rasterStatistics", "resamplingMethod", "scratchWorkspace", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_Input_Rasters, _Output_Workspace, _Raster_Format.GetGPValue(), _Derived_Workspace];

        /// <summary>
        /// <para>Input Rasters</para>
        /// <para>The raster datasets to convert.</para>
        /// <para>要转换的栅格数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Rasters")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _Input_Rasters { get; set; }


        /// <summary>
        /// <para>Output Workspace</para>
        /// <para>The folder where the raster dataset will be written.</para>
        /// <para>将写入栅格数据集的文件夹。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Output_Workspace { get; set; }


        /// <summary>
        /// <para>Raster Format</para>
        /// <para><xdoc>
        ///   <para>The format of the new raster dataset.</para>
        ///   <bulletList>
        ///     <bullet_item>BIL—Esri Band Interleaved by Line file</bullet_item><para/>
        ///     <bullet_item>BIP—Esri Band Interleaved by Pixel file</bullet_item><para/>
        ///     <bullet_item>BMP—Microsoft bitmap graphic raster dataset format</bullet_item><para/>
        ///     <bullet_item>BSQ—Esri Band Sequential file</bullet_item><para/>
        ///     <bullet_item>CRF—Cloud Raster Format</bullet_item><para/>
        ///     <bullet_item>ENVI DAT file—ENVI DAT file</bullet_item><para/>
        ///     <bullet_item>GIF—Graphic Interchange Format for raster datasets</bullet_item><para/>
        ///     <bullet_item>Esri Grid—Esri Grid raster dataset format</bullet_item><para/>
        ///     <bullet_item>ERDAS IMAGINE file—ERDAS IMAGINE raster data format</bullet_item><para/>
        ///     <bullet_item>JPEG 2000—JPEG 2000 raster dataset format</bullet_item><para/>
        ///     <bullet_item>JPEG—Joint Photographic Experts Group raster dataset format</bullet_item><para/>
        ///     <bullet_item>MRF—Meta Raster Format</bullet_item><para/>
        ///     <bullet_item>PNG—Portable Network Graphic raster dataset format</bullet_item><para/>
        ///     <bullet_item>TIFF—Tagged Image File Format for raster datasets</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>新栅格数据集的格式。</para>
        ///   <bulletList>
        ///     <bullet_item>BIL - 按线交错的 Esri 波段文件</bullet_item><para/>
        ///     <bullet_item>BIP - 按像素文件交错的 Esri 波段</bullet_item><para/>
        ///     <bullet_item>BMP - Microsoft 位图图形栅格数据集格式</bullet_item><para/>
        ///     <bullet_item>BSQ - Esri 波段顺序文件</bullet_item><para/>
        ///     <bullet_item>CRF - 云栅格格式</bullet_item><para/>
        ///     <bullet_item>ENVI DAT 文件 - ENVI DAT 文件</bullet_item><para/>
        ///     <bullet_item>GIF - 栅格数据集的图形交换格式</bullet_item><para/>
        ///     <bullet_item>Esri Grid - Esri Grid 栅格数据集格式</bullet_item><para/>
        ///     <bullet_item>ERDAS IMAGINE 文件 - ERDAS IMAGINE 栅格数据格式</bullet_item><para/>
        ///     <bullet_item>JPEG 2000—JPEG 2000 栅格数据集格式</bullet_item><para/>
        ///     <bullet_item>JPEG—联合图像专家组栅格数据集格式</bullet_item><para/>
        ///     <bullet_item>MRF - 元栅格格式</bullet_item><para/>
        ///     <bullet_item>PNG - 可移植网络图形栅格数据集格式</bullet_item><para/>
        ///     <bullet_item>TIFF - 栅格数据集的标记影像文件格式</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Raster Format")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _Raster_Format_value _Raster_Format { get; set; } = _Raster_Format_value._TIFF;

        public enum _Raster_Format_value
        {
            /// <summary>
            /// <para>BIL</para>
            /// <para>BIL—Esri Band Interleaved by Line file</para>
            /// <para>BIL - 按线交错的 Esri 波段文件</para>
            /// </summary>
            [Description("BIL")]
            [GPEnumValue("BIL")]
            _BIL,

            /// <summary>
            /// <para>BIP</para>
            /// <para>BIP—Esri Band Interleaved by Pixel file</para>
            /// <para>BIP - 按像素文件交错的 Esri 波段</para>
            /// </summary>
            [Description("BIP")]
            [GPEnumValue("BIP")]
            _BIP,

            /// <summary>
            /// <para>BMP</para>
            /// <para>BMP—Microsoft bitmap graphic raster dataset format</para>
            /// <para>BMP - Microsoft 位图图形栅格数据集格式</para>
            /// </summary>
            [Description("BMP")]
            [GPEnumValue("BMP")]
            _BMP,

            /// <summary>
            /// <para>BSQ</para>
            /// <para>BSQ—Esri Band Sequential file</para>
            /// <para>BSQ - Esri 波段顺序文件</para>
            /// </summary>
            [Description("BSQ")]
            [GPEnumValue("BSQ")]
            _BSQ,

            /// <summary>
            /// <para>CRF</para>
            /// <para>CRF—Cloud Raster Format</para>
            /// <para>CRF - 云栅格格式</para>
            /// </summary>
            [Description("CRF")]
            [GPEnumValue("CRF")]
            _CRF,

            /// <summary>
            /// <para>ENVI DAT file</para>
            /// <para>ENVI DAT file—ENVI DAT file</para>
            /// <para>ENVI DAT 文件 - ENVI DAT 文件</para>
            /// </summary>
            [Description("ENVI DAT file")]
            [GPEnumValue("ENVI DAT")]
            _ENVI_DAT,

            /// <summary>
            /// <para>GIF</para>
            /// <para>GIF—Graphic Interchange Format for raster datasets</para>
            /// <para>GIF - 栅格数据集的图形交换格式</para>
            /// </summary>
            [Description("GIF")]
            [GPEnumValue("GIF")]
            _GIF,

            /// <summary>
            /// <para>Esri Grid</para>
            /// <para>Esri Grid—Esri Grid raster dataset format</para>
            /// <para>Esri Grid - Esri Grid 栅格数据集格式</para>
            /// </summary>
            [Description("Esri Grid")]
            [GPEnumValue("GRID")]
            _GRID,

            /// <summary>
            /// <para>ERDAS IMAGINE file</para>
            /// <para>ERDAS IMAGINE file—ERDAS IMAGINE raster data format</para>
            /// <para>ERDAS IMAGINE 文件 - ERDAS IMAGINE 栅格数据格式</para>
            /// </summary>
            [Description("ERDAS IMAGINE file")]
            [GPEnumValue("IMAGINE Image")]
            _IMAGINE_Image,

            /// <summary>
            /// <para>JPEG 2000</para>
            /// <para>JPEG 2000—JPEG 2000 raster dataset format</para>
            /// <para>JPEG 2000—JPEG 2000 栅格数据集格式</para>
            /// </summary>
            [Description("JPEG 2000")]
            [GPEnumValue("JP2000")]
            _JP2000,

            /// <summary>
            /// <para>JPEG</para>
            /// <para>JPEG 2000—JPEG 2000 raster dataset format</para>
            /// <para>JPEG 2000—JPEG 2000 栅格数据集格式</para>
            /// </summary>
            [Description("JPEG")]
            [GPEnumValue("JPEG")]
            _JPEG,

            /// <summary>
            /// <para>MRF</para>
            /// <para>MRF—Meta Raster Format</para>
            /// <para>MRF - 元栅格格式</para>
            /// </summary>
            [Description("MRF")]
            [GPEnumValue("MRF")]
            _MRF,

            /// <summary>
            /// <para>PNG</para>
            /// <para>PNG—Portable Network Graphic raster dataset format</para>
            /// <para>PNG - 可移植网络图形栅格数据集格式</para>
            /// </summary>
            [Description("PNG")]
            [GPEnumValue("PNG")]
            _PNG,

            /// <summary>
            /// <para>TIFF</para>
            /// <para>TIFF—Tagged Image File Format for raster datasets</para>
            /// <para>TIFF - 栅格数据集的标记影像文件格式</para>
            /// </summary>
            [Description("TIFF")]
            [GPEnumValue("TIFF")]
            _TIFF,

        }

        /// <summary>
        /// <para>Updated Output Workspace</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Output Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _Derived_Workspace { get; set; }


        public RasterToOtherFormat SetEnv(object XYDomain = null, object ZDomain = null, object ZResolution = null, object compression = null, object configKeyword = null, object extent = null, object nodata = null, object outputCoordinateSystem = null, object outputZFlag = null, object pyramid = null, object rasterStatistics = null, object resamplingMethod = null, object scratchWorkspace = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(XYDomain: XYDomain, ZDomain: ZDomain, ZResolution: ZResolution, compression: compression, configKeyword: configKeyword, extent: extent, nodata: nodata, outputCoordinateSystem: outputCoordinateSystem, outputZFlag: outputZFlag, pyramid: pyramid, rasterStatistics: rasterStatistics, resamplingMethod: resamplingMethod, scratchWorkspace: scratchWorkspace, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}